package com.x52im.rainbowchat.http.logic.logic;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.eva.epc.common.file.FileHelper;
import com.eva.epc.common.util.CommonUtils;
import com.eva.framework.Processor;
import com.eva.framework.dbpool.DBShell;
import com.eva.framework.utils.EndsExceptionFactory;
import com.eva.framework.utils.LoggerFactory;
import com.x52im.rainbowchat.BaseConf;
import com.x52im.rainbowchat.http.logic.AbstractJobDispatcher;
import com.x52im.rainbowchat.http.logic.LogicProcessor2;

import java.util.Vector;

public class MgrProfileJobDispatcher extends AbstractJobDispatcher {
    DBShell db = LogicProcessor2.db;

    /**
     * 维护个人相册、个人介绍语音留言等个人详细信息资源的管理.
     *
     * @param action_id           维护类型，SysConstant中的操作类型常量
     * @param newData             客端发送过来的本次修改新数据(可能为空，理论上与oldData不会同时空）
     * @param oldData             客端发送过来的本次修改前的老数据(可能为空，理论上与newData不会同时空）
     * @param userName            操作者的用户名
     * @param userForUploadPVoice true表示上传的是个我介绍的语音文件
     * @return 返回给客户端的对象
     */
    @Override
    public String dispatch(int action_id, Object newData, Object oldData, Processor.User user) throws Exception {
        String newDataJSON = newData.toString();
        switch (action_id) {
            // 【接口1008-10-7】删除个人相册、个人介绍语音留言等个人详细信息资源，@since KChat_2.5
            case ACTION_APPEND1: {
                // 客户端传过来的数据
                JSONObject nwObj = JSONObject.parseObject(newDataJSON);

                String resource_id = nwObj.getString("resourceId");
                String fileName = nwObj.getString("fileName");
                String resType = nwObj.getString("resType");

                if (CommonUtils.isStringEmpty(resource_id, true)) {
                    throw new IllegalArgumentException("[HTTP]无效的参数, resource_id=null!");
                }

                String dir = null;
                // 要删除的是相册
                if ("0".equals(resType)) {
                    dir = BaseConf.getInstance().getDIR_USER_PHOTO_UPLOAD();
                }
                // 要删除的是个人介绍语音文件
                else if ("1".equals(resType)) {
                    dir = BaseConf.getInstance().getDIR_USER_PVOICE_UPLOAD();
                } else {
                    throw new IllegalArgumentException("[HTTP]无效的参数, resType=" + resType);
                }

                boolean fileDeleteSucess = false;
                // 先删除相片（原图）、语音文件
                fileDeleteSucess = FileHelper.deleteFile(dir + fileName);
                // 如果要删除的是相片则还要删除缩略图
                if ("0".equals(resType))
                // 再删除相片的缩略图
                {
                    FileHelper.deleteFile(dir + "th_" + fileName);
                }

                // 再去删除数据库记录
                if (fileDeleteSucess) {
                    LoggerFactory.getLog().debug("[HTTP]成功删除了用户的个人资料资源文件：" + (dir + fileName));
                    LogicProcessor2.db.update("delete from missu_users_binary where resource_id=?", new Object[]{resource_id}, false);
                }
                return null;
            }
            // 【接口1008-10-8】查询个人相册、个人介绍语音留言的数量（目前用于客户端个
            // 人信息查看界面中显示照片和语音预览数量时使用），@since 4.0
            case ACTION_APPEND2: {
                JSONObject nwObj = JSONObject.parseObject(newDataJSON);
                String uid = nwObj.getString("user_uid");// 要查询用户的uid

                Vector<Vector> vecs = db.queryData("select count(*), res_type from missu_users_binary where user_uid=" +
                        uid + " and res_type in(0,1) group by res_type");
                return JSON.toJSONString(vecs);
            }
            // 【接口1008-10-9】查询个人相册、个人介绍语音留言的完整数据列表（目前用于客户端个
            // 人信息查看界面中显示照片和语音完整列表时使用），@since 4.0
            case ACTION_APPEND3: {
                JSONObject nwObj = JSONObject.parseObject(newDataJSON);
                String uid = nwObj.getString("user_uid");    // 要查询用户的uid
                String resType = nwObj.getString("res_type");// 要查询资源类型：0 表示相片、1 表示个人介绍语音

                Vector<Vector> vecs = db.queryData("select resource_id" +
                        ",res_file_name,res_human_size,res_size,view_count,create_time" +
                        " from missu_users_binary where user_uid='"
                        + uid + "' and res_type=" + resType + " order by create_time desc");
                return JSON.toJSONString(vecs);
            }
            // 【接口1008-10-22】查询个人相册预览图片数据列表（目前用于客户端个
            // 人信息查看界面中显示照片预览列表时使用），@since 4.0
            case ACTION_APPEND4: {
                JSONObject nwObj = JSONObject.parseObject(newDataJSON);
                String uid = nwObj.getString("user_uid");    // 要查询用户的uid

                // 根据db类型的不同，决定选取前4行结果的sql该怎么写
                boolean isSQLServer = DBShell.isSQLServer();
                boolean isMySQL = DBShell.isMySQL();
                Vector<Vector> vecs = db.queryData("select " + (isSQLServer ? "top 4" : "") + " res_file_name" +
                        " from missu_users_binary" +
                        " where user_uid=" + uid + " and res_type=0" +
                        " order by create_time desc " + (isMySQL ? "limit 0,4" : ""));
                return JSON.toJSONString(vecs);
            }

            default:
                throw EndsExceptionFactory.INVALID_ACTION_ID(action_id);
        }
    }
}
